//
// Created by xuan on 2024/4/21.
//

#ifndef F405TEST_UPRE_BSP_UART_H
#define F405TEST_UPRE_BSP_UART_H

#include "stm32f405xx.h"
#include "usart.h"
#include "stdbool.h"

//// 通信方式：1 单串口 单位接收    2 双串口 多位接收

typedef struct {
    uint8_t ManualMode_buffer[9];
    uint8_t ManualMode_location;      //数组位置
    float ManualMode_velocity_dir;
    float ManualMode_velocity_size;
} ManualMode;

extern bool once_togo;

extern ManualMode manual;

uint8_t get_uartReceive(void);


/**

*@Function(函数名称):ManualMode_Init()   开启串口UART2中断接受
 *@Function        ManualMode_Receive() 数据包处理

*@To_do(功能作用):手动模式下，主控向底盘主板发送整车运动的速度和方向的数据包接收

*@Pin(使用管脚): UART2   波特率115200 数据位8位 停止位1位 校验位None
 *@Pin         TX   PC10
 *@Pin         RX   PC11

*@var(主要变量): 包头  0xc0   包尾 0x0c
 *@var        数据包大小  5字节
 *@var        外部使用数据
 *@var         ManualMode_velocity_dir 意义：整车速度方向 类型：float
 *@var         ManualMode_velocity_size意义：整车速度大小 类型：float

*@hardware(搭载硬件):stm32F405RGT6（R1底盘主板2.0）

*@group(组别):底盘组

*qq|wechat|tel(选填):q:111111;w:222222:t:333333

**/
void ManualMode_Init(void);

void ManualMode_Receive(void);

/**

*@Function(函数名称):MasterSlave_communication_Init() 开启串口中断
 *@Function        PathFeedback_to_Master(uint8_t path_knots_num) 向主控发送当前路径节点号，用于与上层进行同步
 *@Function                                                       包头：0x88 包尾0x11 数据位：1位
 *@Function        MasterSlave_communication_Receive()  1.上层完成任务，底盘进行下一个路径
 *@Function                                               包头0x11
 *@Function                                             2.接收二区球的颜色
 *@Function                                               包头0x22

*@To_do(功能作用):主从机间通信(用于半自动)

*@Pin(使用管脚): UART4   波特率115200 数据位8位 停止位1位 校验位None
 *@Pin         TX   PA3
 *@Pin         RX   PA2

*@var(主要变量): 包头  0x11    包尾   0x01
 *@var        数据包大小  4
 *@var        发送数据：bool型 0x01或0x00
 *@var        外部使用数据
 *@var        g_Auto_Num (UPRE_ROBOT_TASK.c/.h) 用于控制路径进程
 *
 *@var        包头  0x22      包尾  0x02
 *@var        数据包大小  4
 *@var        发送数据：uint8_t型 [_  _  _  _ || _  _  _ _] [_ _ || _ _ _ _ _ _]
                                16 15 14 13   12 11 10 9  8  7    6 5 4 3 2 1
 *@var        1-6：第一排球
 *@var        7-12：第二排球
 *@var        13-16：校验（校验规则：9-12位取反）
 *@var        外部使用数据
 *@var        ball[2][6] (UPRE_DIJKSTRA.c/.h) 录入二区球的颜色

*@hardware(搭载硬件):stm32F405RGT6（R1底盘主板2.0）

*@group(组别):底盘组

*qq|wechat|tel(选填):q:111111;w:222222:t:333333

**/
void MasterSlave_communication_Init(void);

void PathFeedback_to_Master(uint8_t path_knots_num);

void MasterSlave_communication_Receive(void);


/**
*@Function(函数名称):Communicate_Receive() 开启串口中断

*@To_do(功能作用):主从机间通信

*@Pin(使用管脚): UART4   波特率115200 数据位8位 停止位1位 校验位None
*@Pin         TX   PA3
*@Pin         RX   PA2

*@var(主要变量): 以上两种通讯协议的整合版

*@hardware(搭载硬件):stm32F405RGT6（R1底盘主板2.0）

*@group(组别):底盘组

        *qq|wechat|tel(选填):q:111111;w:222222:t:333333

**/
void Communicate_Init(void);

void Communicate_Receive(void);

#endif //F405TEST_UPRE_BSP_UART_H


